package com.ipan.kits.reflect;



import org.apache.commons.beanutils.ConvertUtilsBean;
import org.apache.commons.beanutils.converters.DateConverter;

/**
 * 严格的类型转换器；
 * 默认的ConvertUtils类在转换类型时候是不严格的，默认对基础类型、标准类型转换失败会返回默认值，
 * 很多时候我们希望得到真实结果，转换不出来就抛出异常；考虑到该开源框架有可能被其他开源框架使用到，
 * 所以不适合直接修改ConvertUtilsBean的配置；
 * 
 * BeanUitls支持为不能类加载器设置不同的BeanUtils工具，但是这样实现会比较麻烦；
 * 在项目中，如果需要用到严格类型转换就调用这个严格的类型转换器；
 * 
 * 注意：如果要严格地为bean设置属性，应该调用PropertyUtils类；反之，调用BeanUtils类；
 * 注意：增强了对日期格式的转换；
 * 
 * @author iPan
 * @version 2013-07-21
 */
public class StrictConvertBean extends ConvertUtilsBean {

	private static StrictConvertBean INSTANCE = new StrictConvertBean();
	
	public static StrictConvertBean getInstance() {
		return INSTANCE;
	}
	
	private StrictConvertBean() {
		register(true, true, 0);
		registerDateConverter();
	}
	
	/**
	 * 自定义日期格式
	 */
	private void registerDateConverter() {
		DateConverter dc = new DateConverter();
		dc.setUseLocaleFormat(true);
		dc.setPatterns(new String[] { 	"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", 
										"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", 
										"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss" });
		register(dc, java.util.Date.class);
	}
	
}
